RBIプロキシの紹介
SOFTCAMP SHIELDGate 隔離ブラウザ連携のための HTTP/HTTPS プロキシサービス
📋 目次
概要
RBIProxyはユーザーの一般的なブラウザトラフィックをSOFTCAMP SHIELDGate 隔離ブラウザ自動接続する中間プロキシサーバーです。
ユーザーは普段通りウェブブラウジングを行いますが、すべてのウェブ接続は隔離された環境(RBI)で実行され、セキュリティの脅威から安全に保護されます。
コアバリュー
- 透明なセキュリティ: ユーザーエクスペリエンスを損なうことなくセキュリティを強化する(自動リダイレクト)
- 中央集権的制御: 単一プロキシで全てのウェブトラフィックを中央で制御
- 簡単な中継構造: URL変換およびSHIELDGate連携のみを実行(複雑なポリシーはSHIELDGateで処理)
RBIProxyとは?
RBI (Remote Browser Isolation)
リモートブラウザ隔離技術は、ユーザーのウェブブラウジングを物理的に隔離されたリモート環境で実行するセキュリティソリューションです。
전통적인 웹 접속:
[사용자 PC] ──→ [인터넷 웹사이트]
↑
악성코드 다운로드 위험
제로데이 공격 노출
피싱 사이트 직접 접속
RBI 적용 후:
[사용자 PC] ──→ [격리된 브라우저] ──→ [인터넷 웹사이트]
↑
악성코드가 격리 환경에서만 실행
사용자 PC는 안전
RBIProxyの役割
RBIProxyはPACフィルタリングを通過したトラフィックをSHIELDGateに変換する中継機です:
🎯 フィルタリング構造
┌──────────────────────────────────────────────────────────────┐
│ PAC 파일 (사용자 PC에서 실행) │
│ "어느 사이트는 프록시 거치고, 어느 건 직접?" │
└────────────┬─────────────────────────────┬───────────────────┘
↓ ↓
[허용 사이트] [차단 사이트]
naver.com example.com
microsoft.com unknown-site.com
내부 IP (192.168.x.x) 기타 모든 사이트
↓ ↓
DIRECT (프록시 안 거침) PROXY 10.14.10.176:9999
↓ ↓
[직접 접속] ┌─────────────────────────────┐
│ RBIProxy 서버 │
│ "URL 변환기" │
└──────┬──────────────────────┘
↓
URL 변환 수행
↓
https://shieldgate.softcamp.co.kr/
gate-proxy?currentTab=true&url=원본URL
↓
HTML 리다이렉트 응답
↓
┌───────────────────────┐
│ 사용자 브라우저가 │
│ 자동으로 이동 │
└──────┬────────────────┘
↓
┌─────────────────┐
│ SHIELDGate │
│ gate-proxy │
└──────┬──────────┘
↓
┌─────────────────┐
│ rb-app │
│ (격리 브라우저) │
└──────┬──────────┘
↓
[실제 웹사이트 접속]
具体的な例
例 1: naver.com に接続 (許可されたサイト)
[사용자] naver.com 입력
↓
[PAC 파일] "naver.com? 어? 너 허용이구나!"
↓
[결정] "그럼 너는 DIRECT"
↓
[결과] naver.com에 바로 접속 ✅ (RBIProxy 안 거침)
例 2: example.com に接続 (ブロック対象サイト)
[사용자] example.com 입력
↓
[PAC 파일] "example.com? 허용 목록에 없네"
↓
[결정] "너는 RBIProxy로 보내"
↓
[RBIProxy] URL 변환
원본: http://example.com
→
변환: https://shieldgate.softcamp.co.kr/gate-proxy?currentTab=true&url=http://example.com
↓
[HTML 리다이렉트 응답]
<meta http-equiv="refresh" content="0;url=변환된URL"/>
↓
[사용자 브라우저] 자동으로 SHIELDGate URL로 이동
↓
[SHIELDGate] gate-proxy가 rb-app(격리 브라우저) 실행
↓
[rb-app] 격리된 환경에서 example.com 접속
↓
[결과] 사용자는 격리 브라 우저로 example.com 이용 ✅
全体アーキテクチャ
単純化されたフローチャート
┌─────────────────────┐
│ 사용자 PC │
│ (일반 브라우저) │
│ Chrome / Edge 등 │
└──────────┬──────────┘
│
│ ① Windows 프록시 설정 (PAC)
│ - 허용 사이트 → DIRECT
│ - 차단 사이트 → PROXY 10.14.10.176:9999
↓
┌─────────────────────┐
│ RBIProxy 서버 │
│ (이 프로젝트) │
│ - URL 변환만 │
└──────────┬──────────┘
│
│ ② HTML 리다이렉트
│ shieldgate.softcamp.co.kr/
│ gate-proxy?currentTab=true&url=원본URL
↓
┌─────────────────────┐
│ SHIELDGate │
│ (격리 브라우저) │
│ - gate-proxy │
└──────────┬──────────┘
│
│ ③ rb-app 실행
↓
┌─────────────────────┐
│ rb-app │
│ (격리 브라우저) │
└──────────┬──────────┘
│
│ ④ 실제 웹사이트 접속
↓
┌─────────────────────┐
│ 인터넷 웹사이트 │
│ example.com 등 │
└─────────────────────┘
↓
┌─────────────────────┐
│ インターネットウェブサイト │
│ example.com など │
└─────────────────────┘
### 상세 데이터 흐름
**중요**: PAC 파일이 1차 필터링을 수행합니다!
┌─────────────────────────────────────────────────────── ──────────┐
│ ユーザーPC │
│ │
│ [Chrome/Edge] ユーザーがURLを入力
│ ↓ │
│ ┌─────────────────────────────────────────────┐ │
│ │ PACファイル (フィルタリング) │ │
│ │ "このサイトはどこに送る?" │ │
│ └──────────┬──────────────────────────────────┘ │
│ │ │
│ ┌──────┴───────┐ │
│ ↓ ↓ │
│ [許可されたサイト] [ブロック対象] │
│ naver.com example.com │
│ ↓ ↓ │
│ DIRECT PROXY 10.14.10.176:9999 │
│ │
└──────┼──────────────┼──────────────────────────────────────────┘
│ │
↓ │ RBIProxyに渡す
[naver.com] ↓
直接接続 ┌─────────────────────────────────────────────────────────────────┐
│ RBIProxyサーバー │
│ (URL 変換ツール) │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 1. リクエスト受信 (9999ポート) │ │
│ └──────────────────┬───────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────▼─────────────────────────── ────────────┐ │
│ │ 2. URL 変換 │ │
│ │ 原本:http://example.com │ │
│ │ → │ │
│ │ 変換:https://shieldgate.softcamp.co.kr/ │ │
│ │ gate-proxy?currentTab=true&url=http://example.com│ │
│ └──────────────────┬───────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────▼───────────────────────────────────────┐ │
│ │ 3. HTML リダイレクト応答 │ │
│ │ │ │
│ └──────────────────┬───────────────────────────────────────┘ │
│ │ │
└─────────────────────┼────────────────────────────────────────────┘
│
↓
┌─────────────────────────────┐
│ ユーザーのブラウザが │
│ SHIELDGateに自動的に移動 │
└─────────────┬───────────────┘
↓
┌─────────────────────┐
│ SHIELDGate │
│ gate-proxy │
└──────────┬──────────┘
│
│ rb-appの実行
↓
┌─────────────── ──────┐
│ rb-app │
│ (隔離ブラウザ) │
└──────────┬──────────┘
│
│ 直接インターネット接続
↓
┌─────────────────────┐
│ インターネットウェブサイト │
│ example.com │
└─────────────────────┘
***
## 주요 구성 요소
### 1. Windows PAC (Proxy Auto-Config)
**위치**: 사용자 PC의 Windows 프록시 설정
**역할**: **1차 필터링 - 사이트별로 프록시 사용 여부 결정**
**중요**: PAC 파일이 먼저 판단합니다!
- ✅ **허용 사이트** (naver.com, microsoft.com 등) → `DIRECT` (프록시 안 거침)
- ⚠️ **일반 사이트** (example.com 등) → `PROXY 10.14.10.176:9999` (RBIProxy로)
**예시 PAC 파일** (`pac.js`):
```javascript
function FindProxyForURL(url, host) \{
// 1. SHIELDGate 자체는 DIRECT (무한 루프 방지)
if (dnsDomainIs(host, "shieldgate.softcamp.co.kr") ||
dnsDomainIs(host, "security365.co.kr")) \{
return "DIRECT";
\}
// 2. 허용 사이트 목록 (예외 처리)
if (dnsDomainIs(host, "naver.com") ||
dnsDomainIs(host, "microsoft.com") ||
dnsDomainIs(host, "office365.com")) \{
return "DIRECT"; // ← naver.com? 어? 너 허용이구나! DIRECT!
\}
// 3. 내부 네트워크는 DIRECT
if (isPlainHostName(host) ||
shExpMatch(host, "*.local") ||
isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0")) \{
return "DIRECT";
\}
// 4. 기본 규칙: RBIProxy로 보냄
return "PROXY 10.14.10.176:9999"; // ← example.com? 너는 RBIProxy로!
\}
実際の動作:
사용자가 naver.com 입력
↓
PAC: "naver.com? 어? 너 허용이구나!"
↓
PAC: "그럼 너는 DIRECT"
↓
naver.com에 바로 접속 ✅ (RBIProxy 거치지 않음)
사용자가 example.com 입력
↓
PAC: "example.com? 허용 목록에 없네"
↓
PAC: "너는 RBIProxy로 보내" (PROXY 10.14.10.176:9999)
↓
RBIProxy로 전달 → 다음 단계 진행
PACファイルの適用方法:
-
手動適用(個別PC):
- Windows 設定 → ネットワークとインターネット → プロキシ
- "自動プロキシ設定の使用"を有効にする
- スクリプトアドレス:
http://10.14.10.176:9999/RestAPI/pac.js
-
GPOの適用(ドメイン一括適用):
그룹 정책 편집기
→ 사용자 구성 → 기본 설정 → Windows 설정 → 레지스트리
→ HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings
→ AutoConfigURL = "http://10.14.10.176:9999/RestAPI/pac.js" -
PACファイルのダウンロード:
# RBIProxy가 제공하는 PAC 파일
curl http://10.14.10.176:9999/RestAPI/pac.js -o pac.js
2. RBIProxy サーバー
言語: Go (Golang)
ポート:
- 9999: プロキシサーバー (メイン機能)
- 80: REST API サーバー (管理/モニタリング)
デプロイメント: Kubernetes (Dockerコンテナ)
主要な役割: "URL 変換ツール"
PACから送信されたすべてのトラフィックを受け取ってSHIELDGate URL形式に変換します。
┌─────────────────────────────────────────────────────┐
│ RBIProxy 서버 (URL 변환기) │
│ │
│ ① 프록시 요청 수신 (9999 포트) │
│ ↓ │
│ ② URL 변환 │
│ 원본: http://example.com │
│ → │
│ 변환: https://shieldgate.softcamp.co.kr/ │
│ gate-proxy?currentTab=true&url=원본URL │
│ ↓ │
│ ③ HTML 리다이렉트 응답 │
│ <meta http-equiv="refresh" │
│ content="0;url=변환URL"/> │
│ │
└─────────────────────────────────────────────────────┘
コアコード (src/main.go317~320行):
func redirectUrl(url string) string \{
// SHIELDGate 방식: URL을 쿼리 파라미터로 전달
return cfg.RBIProxy.RBI.BaseURL +
"gate-proxy?currentTab=true&url=" + url
\}
実際の変換例:
입력: http://example.com
→
출력: https://shieldgate.softcamp.co.kr/gate-proxy?currentTab=true&url=http://example.com
3. SHIELDGate (隔離ブラ ウザ)
URL: https://shieldgate.softcamp.co.kr
構成:
- gate-proxy: ウェブインターフェース (URLを受け取ってrb-appを実行)
- rb-app: 隔離ブラウザエンジン (実際のウェブサイトへのアクセスとレンダリング)
役割:
- gate-proxyがURLパラメータを受け取ってrb-app(隔離ブラウザ)を実行
- rb-appが隔離された環境で実際のウェブサイトをレンダリングする
- ユーザーに画面のみをストリーミング
- セキュリティポリシーの適用(ダウンロード/アップロード/コピー制御など)
URL 規約:
https://shieldgate.softcamp.co.kr/gate-proxy?currentTab=true&url=<원본URL>
動作方式:
gate-proxy URL로 들어옴
↓
gate-proxy가 url 파라미터 추출
↓
rb-app(격리 브라우저) 실행
↓
rb-app이 실제 웹사이트에 직접 접속
↓
사용자에게 화면 스트리밍
例示:
변환된 URL: https://shieldgate.softcamp.co.kr/gate-proxy?currentTab=true&url=http://example.com
→ gate-proxy가 rb-app 실행
→ rb-app이 http://example.com 접속